const { DataTypes } = require('sequelize');
const sequelize = require('./db');
const bcrypt = require('bcryptjs');
const salt = 10;

//define(表名,定义列)
//studnet name age gender
const Users = sequelize.define(
  'users',
  {
    username: {
      type: DataTypes.STRING,
      allowNull: false,
      //名字必须是2到4字
      validate: {
        //匹配一个正则 必须是2到7个字符之间
        is: /^[a-zA-Z0-9_-]{2,7}$/,
      },
    },
    password: {
      type: DataTypes.STRING,
      allowNull: false,
      //添加设置器
      set(value) {
        const hash = bcrypt.hashSync(value, salt);
        this.setDataValue('password', hash);
      },
    },
    //  三种类型 0:普通用户 1:交管部门 2:管理员
    type: {
      type: DataTypes.STRING,
      allowNull: false,
      defaultValue: 'user',
      validate: {
        isIn: [['user', 'traffic', 'admin']], // 明确允许的角色类型
      },
    },
    url: {
      type: DataTypes.STRING,
      allowNull: true,
      defaultValue: 'http://localhost:3001/avatarImg/headPortrait.png',
    },
    tel: {
      type: DataTypes.STRING,
      allowNull: true,
      validate: {
        is: /^1[3-9]\d{9}$/,
      },
    },
    email: {
      type: DataTypes.STRING,
      allowNull: true,
    },

    // 个人所在地
    motto: {
      type: DataTypes.STRING,
      allowNull: true,
    },
    phone: {
      type: DataTypes.STRING,
      allowNull: true,
    },
    job: {
      type: DataTypes.STRING,
      allowNull: true,
    },
    birthday: {
      type: DataTypes.STRING,
      allowNull: true,
    },
    signature: {
      type: DataTypes.STRING,
      allowNull: true,
    },
    //登录状态 0:未登录 1:已登录
    loginStatus: {
      type: DataTypes.INTEGER,
      allowNull: false,
      defaultValue: 0,
    },
  },
  {
    paranoid: true, //软删除
  }
);
module.exports = Users;
